package modelo.ventana;


import java.awt.Color;
import java.awt.Dimension;
import java.awt.Event;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Menu;
import java.awt.MenuBar;
import java.awt.MenuItem;
import java.awt.PopupMenu;
import java.awt.Toolkit;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.BufferedWriter;
import java.io.FileWriter;

import javax.swing.JFileChooser;
import javax.swing.JOptionPane;


import modelo.Contenedor;

import Controlador.EscritorXML;
import Controlador.LectorXML;
import ar.uba.fi.algo3.titiritero.ControladorJuego;
import ar.uba.fi.algo3.titiritero.vista.*;


public class VentanaPrincipal extends Ventana{

	private static final long serialVersionUID = 1L;
	PopupMenu popup;

	public VentanaPrincipal(ControladorJuego unControlador){
		super(Contenedor.getInstance().getAncho(),Contenedor.getInstance().getAlto(),unControlador);
		crearIU();
	}
	
	protected void crearIU() {
		setSize(Contenedor.getInstance().getAncho()+200,Contenedor.getInstance().getAlto()+50);
		setResizable(false);
		MenuBar mb = new MenuBar();
		Menu m2 = new Menu();
		MenuItem m3 = new MenuItem();
		MenuItem m1 = new MenuItem();
		MenuItem m4 = new MenuItem();
		MenuItem m5 = new MenuItem();
		m2.add(m1);
		m2.add(m3);
		m2.add(m4);
		m2.add(m5);
		m2.setLabel("Archivo");
		mb.add(m2);
		m1.setLabel("Inicio");
		m3.setLabel("Cargar Partida");
		m4.setLabel("Guardar Partida");
		m5.setLabel("Salir");
		this.setMenuBar(mb);
		/*popupPuntajes = new PopupMenu("Mayores Puntajes");
		add(popupPuntajes);
		NombreElem = new MenuItem(Nombre + " es mi nombre");
		PosicionElem = new MenuItem("Posicion (" + PosicionX + ";" + PosicionY
				+ ")");
		VidaElem = new MenuItem("Vida " + Vida);// o si esta visible
		// menuItem.addActionListener(this);
		ListaPuntajes = new ArrayList();
		popup.add(NombreElem);
		popup.add(PosicionElem);
		popup.add(VidaElem);
		MouseListener listener = (MouseListener) new PopupListener();
		addMouseListener(listener);*/
		addWindowListener(new WindowAdapter() {
			public void windowClosing(WindowEvent e) {
				dispose();
				System.exit(0);
			}
		});

	}
	
	
	public void pintarPuntaje(Graphics g) {
		Contenedor unContenedor = Contenedor.getInstance();
		g.setColor(Color.WHITE);
		g.setFont(new Font("Arial", Font.BOLD, 20));
		g.drawString("Puntaje:", unContenedor.getAncho(),
				unContenedor.getAlto()-100);
		g.drawString(unContenedor.getAlgoTank().getPuntos() + "",
				unContenedor.getAncho() + 100 ,
				unContenedor.getAlto()-100);
		g.drawString("Nivel:", unContenedor.getAncho(),
				unContenedor.getAlto()-80);
		g.drawString(unContenedor.getNivel() + "",
				unContenedor.getAncho() + 100 ,
				unContenedor.getAlto()-80);
		}
	
	public void pintarGameOver(Graphics g) {
		Contenedor unContenedor = Contenedor.getInstance();
		g.setColor(Color.WHITE);
		g.setFont(new Font("Arial", Font.BOLD, 80));
		g.drawString("GAME OVER", unContenedor.getAncho()/2,
				unContenedor.getAlto()/2);
	}
	
	public void pintarFinNiveles(Graphics g) {
		Contenedor unContenedor = Contenedor.getInstance();
		g.setColor(Color.WHITE);
		g.setFont(new Font("Arial", Font.BOLD, 80));
		g.drawString("GANASTE", unContenedor.getAncho()/2,
				unContenedor.getAlto()/2);
	}

	public void paint(Graphics g) {
		super.paint(g);
	//	pintarPuntaje(g);
	}

	public void limpiar() {
		Contenedor unContenedor = Contenedor.getInstance();
		super.limpiar();
		Graphics superficieParaDibujar =  (Graphics)Contenedor.getInstance().getControlador().getSuperficieDeDibujo().getBuffer();
		pintarPuntaje(superficieParaDibujar);	
		if(unContenedor.getFinNivel()){
			Contenedor.getInstance().getControlador().detenerJuego();
			pintarFinNiveles(superficieParaDibujar);
		}
		if(unContenedor.getGameOver()){
			Contenedor.getInstance().getControlador().detenerJuego();
			pintarGameOver(superficieParaDibujar);
		}
	}
	
	public boolean action(Event event, Object arg) {
		ControladorJuego unControlador = Contenedor.getInstance().getControlador();
		if (event.target instanceof MenuItem) {
			MenuItem mi = (MenuItem) (event.target);
			if (mi.getLabel() == "Guardar Partida") {
				unControlador.detenerJuego();
				EscritorXML escritor = new EscritorXML();
				escritor.escribir();
				unControlador.restartJuergo();
			} else if (mi.getLabel() == "Salir") {
				System.exit(0);
			} else if (mi.getLabel() == "Cargar Partida") {
				try {
					LectorXML.correr("Salvaguardia.xml");
				} catch (Exception e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
			} else if (mi.getLabel() == "Inicio") {
				if(!unControlador.estaEnEjecucion()){
					unControlador.setIntervaloSimulacion(50);
					unControlador.comenzarJuego();
				}
			}
		}
		return true;
	}

}
